﻿#ifndef _SIMPLE_THREAD_H_
#define _SIMPLE_THREAD_H_

#if defined(_WIN32)
#include <windows.h>
#else
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/time.h>
#include <errno.h>
#include <algorithm>
#endif
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>

#if defined(ANDROID) || defined(LINUX)
#include <sys/prctl.h>
#endif

namespace base
{

    struct OS_Thread_Priv
    {
#if defined(WIN32)
        HANDLE hThread;
#else
        pthread_t hThread;
#endif
    };

    class SimpleThread
    {
    public:
        SimpleThread();

        virtual ~SimpleThread();

        // 启动线程, 保证Start()函数结束时，线程已经开始执行
        virtual int Start();

        virtual int Stop();

        virtual bool IsStop();

        // 等待线程关闭
        virtual void Join();

        // 子类需要重载此函数
        // Run()函数运行在新建的线程内
        virtual void Run() = 0;

        // HANDLE ThreadId() { return thread_id_; }

        void ThreadMain();

    private:
        void* m_Priv;
        bool is_stop_;
    };

} // namespace Thread

#endif // _SIMPLE_THREAD_H_
